%% Author: user11
%% Created: 2012-5-22
%% Description: TODO: Add description to tool
-module(tool).

%%
%% Include files
%%

%%
%% Exported Functions
%%
-export([to_list/1, f2s/1, to_integer/1]).

%%
%% API Functions
%%
to_list(Msg) when is_list(Msg) ->
	Msg;
to_list(Msg) when is_atom(Msg) ->
	atom_to_list(Msg);
to_list(Msg) when is_binary(Msg) ->
	binary_to_list(Msg);
to_list(Msg) when is_integer(Msg) ->
	integer_to_list(Msg);
to_list(Msg) when is_float(Msg) ->
	f2s(Msg);
to_list(Msg) when is_tuple(Msg) ->
	tuple_to_list(Msg);
to_list(_) ->
	throw(other_value).

%% @doc convert other type to integer
-spec to_integer(Msg :: any()) -> integer().
to_integer(Msg) when is_integer(Msg) -> 
    Msg;
to_integer(Msg) when is_binary(Msg) ->
	Msg2 = binary_to_list(Msg),
    list_to_integer(Msg2);
to_integer(Msg) when is_list(Msg) -> 
    list_to_integer(Msg);
to_integer(Msg) when is_float(Msg) -> 
    round(Msg);
to_integer(_Msg) ->
    throw(other_value).

%% convert float to string, f2s(1.5678) -> 1.57
f2s(N) when is_integer(N) ->
	integer_to_list(N) ++ ".00";
f2s(F) when is_float(F) ->
	[A] = io_lib:format("~.2f", [F]),
	A.
	
%%
%% Local Functions
%%

